#include <iostream>
#include <chrono>
#include <unistd.h>
#include <algorithm>
#include <vector>
using namespace std::chrono;

class Timer
{
public:
    void Start()
    {
        start = steady_clock::now();
    }
    void End()
    {
        end = steady_clock::now();
    }
    //毫秒
    long GetDuration()
    {
        return duration_cast<milliseconds>(end - start).count();
    }
private:
    steady_clock::time_point start;
    steady_clock::time_point end;
};

void BubbleSort(std::vector<int>& v)
{
    for(int i = 0;i < v.size() - 1;i++)
    {
        for(int j = 0;j < v.size() - i - 1;j++)
        {
            if(v[j] > v[j+1])
                std::swap(v[j],v[j+1]);
        }
    }
}

int main()
{
    //clock : 时钟
    //time_point : 时间点
    //duration : 时间间隔
    //system_clock : 系统时钟
    //steady_clock : 稳定时钟 : 从电脑开机开始计时 纳秒
    // std::chrono::time_point t = std::chrono::system_clock::now();
    // // 把时间点转成time_t
    // std::time_t time = std::chrono::system_clock::to_time_t(t);
    // std::cout<<ctime(&time)<<std::endl;

    // time_point start = steady_clock::now();
    // sleep(3);
    // time_point end = steady_clock::now();
    // auto d = duration_cast<milliseconds>(end - start);
    // std::cout<<d.count()<<std::endl;

    srand(time(nullptr));
    std::vector<int> v;
    for(int i = 0;i < 100000;i++)
        v.push_back(rand() % 100000);
    auto v2 = v;
    Timer t;
    t.Start();
    std::sort(v.begin(),v.end());
    t.End();
    std::cout<<"标准库排序："<<t.GetDuration()<<std::endl;

    t.Start();
    BubbleSort(v2);
    t.End();
    std::cout<<"冒泡排序："<<t.GetDuration()<<std::endl;
    return 0;
}